"""
File: example_1.py
Project: 活动_1_制作飞机飞行动画
File Created: 2020/02/12 18:30:16
Author: Dunmore (fovd2020@outlook.com)
---------------------------------------------------------
Description:
1.3.1 活动1 制作飞机飞行动画
---------------------------------------------------------
"""
import os
import pygame


WHITE = (255, 255, 255)
# 获取文件所在的路径
CURRRENT_DIR = (
    os.path.dirname(__file__) if "__file__" in locals() else os.getcwd()
)

# 初始化pygame
pygame.init()
# 设置窗口标题
pygame.display.set_caption("飞机飞行")
# 创建一个Surface对象（面板，代表了在桌面上出现的那个窗口）
screen = pygame.display.set_mode([400, 800])
# 用自定义的白色填充
screen.fill(WHITE)

# 装载指定路径的图片(飞机)
my_flight = pygame.image.load(
    os.path.join(CURRRENT_DIR, "images", "type_3.png")
)
enemy = pygame.image.load(os.path.join(CURRRENT_DIR, "images", "enemy.png"))
# 改变图片大小为64x64
my_flight = pygame.transform.scale(my_flight, (64, 64))
enemy = pygame.transform.scale(enemy, (64, 64))
enemy = pygame.transform.rotate(enemy, 180)


# 设定飞机出现的坐标(x,y)
my_x = 168
my_y = 600
enemy_x = 100
enemy_y = 20

# 将图片绘制到screen上
screen.blit(my_flight, (my_x, my_y))
# 刷新，将绘制上了飞机的screen重新显示
pygame.display.update()

# 创建时钟对象，可以控制游戏循环频率
t = pygame.time.Clock()

# 用来处理按键按住不放的情况,50ms响应时间
pygame.key.set_repeat(True, 50)
# 游戏结束标记，当按下Esc键的时候设置为False，不再继续循环
keep_going = True
while keep_going:
    # 设定每秒循环30次
    t.tick(30)
    # 获取事件响应
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            # 根据相应的方向按键调整x和y坐标来移动飞机
            if event.key in [pygame.K_UP, pygame.K_w]:
                my_y -= 5
            if event.key in [pygame.K_DOWN, pygame.K_s]:
                my_y += 5
            if event.key in [pygame.K_LEFT, pygame.K_a]:
                my_x -= 5
            if event.key in [pygame.K_RIGHT, pygame.K_d]:
                my_x += 5
            if event.key == pygame.K_ESCAPE:
                keep_going = False
    # 如果不按任何键，每次修改飞机的y坐标减1，即向上移动1点
    my_y -= 1

    # 重新绘制screen以及新的位置的飞机
    screen.fill(WHITE)
    screen.blit(my_flight, (my_x, my_y))

    # 如果敌机的y坐标小于600，继续往下移动
    if enemy_y < 600:
        enemy_y += 1
    screen.blit(enemy, (enemy_x, enemy_y))

    # 刷新显示
    pygame.display.update()

# 退出游戏
pygame.quit()
